<?php
class promo_block extends module{
	function content_init()
	{
		global $common_data_server;

		// Не производить замену для ссылок, наичнающихся с:
		$Exclude=array(
				"#",
				"mailto",
				"javascript",
			);

		// подключаем шаблон
		$template=$common_data_server."module_templates/promo_block/".$this->view_param["template"]."/index.vtmpl";
		$vtmpl = new  VlibTemplate();

		if (file_exists($template))
		{
			$vtmpl->newTemplate($template);
			// строим запрос
			$now_string=date("YmdHis");
			$to_string=date("Ymd")."000000";
			$query="select PB.* "
				."from PROMO_BLOCK PB, CONTENT_MAP CM "
				."where  CM.INF_BLOCK_ID=".$this->block_id." "
				."and  PB.CONTENT_ID=CM.CONTENT_ID "
				."and  PB.LANG_ID=".$this->lang_id." "
				."and  PB.VERSION=".$this->version." "
				."and  PB.START_DATE<".$now_string." "
				."and  PB.END_DATE>=".$to_string." "
				."and  (PB.MAX_NUM_LOADS>PB.NUM_LOADS or PB.MAX_NUM_LOADS=0 or PB.MAX_NUM_LOADS is null) ";
			$promo=sql_select($query);
			if(count($promo))
			{
				// Сумма приоритетов
				$PrioritySum=0;
				for ($i=0; $i<count($promo); $i++)
				{
 					$PrioritySum+=$promo[$i]['PRIORITY'];
				}

				// Случайное число в интервале от 1 до $PrioritySum
				$RandomNumber=rand(1, $PrioritySum);

				// ID на который выпало случайное число
				$MinValue=0;
				for ($i=0; $i<count($promo); $i++)
				{
					$MaxValue=$MinValue+$promo[$i]['PRIORITY'];
					if($MinValue<$RandomNumber and $RandomNumber<=$MaxValue)
						{
 							$RandomID=$i;
							break;
						}
					$MinValue=$MaxValue;
				}


				// Отыскиваем все href-ы
				$reg='~href=(?:(?:\'([^\']+)\')|(?:\"([^\"]+)\")|([^\s>]+))~ei';
				preg_match_all($reg, $promo[$RandomID]['BODY'], $matches);

				$promo_body=$promo[$RandomID]['BODY'];


				// Проходимся по всем найденным href-ам
				for($i=0; $i<count($matches[0]); $i++)
				{
					// и заменяем все, кроме тех, что в массиве $Emplode
					$reg2="~^(".implode("|", $Exclude).").*~";
					if (!preg_match($reg2, trim($matches[1][$i].$matches[2][$i].$matches[3][$i])))
					{
						$replace="href=\"/common/promo_redirect.php?cid=".$promo[$RandomID]['CONTENT_ID']."&lid=".$promo[$RandomID]['LANG_ID']."&v=".$promo[$RandomID]['VERSION']."&ul=".base64_encode(trim($matches[1][$i].$matches[2][$i].$matches[3][$i]))."\"";
						$promo_body=str_replace($matches[0][$i], $replace, $promo_body);
					}
				}


				$vtmpl->SetVar('BODY', $promo_body);

				if($this->version==0)  // накрутка NUM_LOADS только для "рабочей версии"
				{
					update_record_with_type('PROMO_BLOCK',
						array(
							array('name' => 'NUM_LOADS', 'value' => ($promo[$RandomID]['NUM_LOADS']+1))
							),
						array(
							array("name"=>"CONTENT_ID","value"=>$promo[$RandomID]['CONTENT_ID']),
							array("name"=>"LANG_ID","value"=>$promo[$RandomID]['LANG_ID'])
							)
						);
				}
			}

			// вывод в рабочую область
			$this->body=$vtmpl->grab();
		}
		else
		{
			$this->body="не найден файл шаблона <b>".$template."</b>";
		}
	}
#........................................................................................
	function get_hash_code(){return 0;}
#........................................................................................
}
?>